package fr.generali.accueilclient.commun.metier.specification.rg.entreprise;

import fr.generali.accueilclient.client.om.IClientEntreprise;
import fr.generali.accueilclient.commun.metier.specification.LeafSpecification;

public class RGEntrepriseSiretNicValide extends
		LeafSpecification<IClientEntreprise> {
	
	 /**
     * Resultat 9
     */
    private static final int RESULTAT_9 = 9;

    /**
     * Multiple 10
     */
    private static final int MULTIPLE_10 = 10;
    

	@Override
	public boolean isSatisfiedBy(IClientEntreprise candidate) {
		
		boolean isSiretNicValide=false;
		
		if(candidate!=null){
			
			String siren = candidate.getSiren();
			
			String codeNic = candidate.getCodeNic();
			
			 String siret = siren + codeNic;

		        int total = 0;
		        int digit = 0;

		        for (int i = 0; i < siret.length(); i++) {
		            /**
		             * Recherche les positions impaires que l'on multiplie par 2
		             */
		            if ((i % 2) == 0) {
		                digit = Integer.parseInt(String.valueOf(siret.charAt(i))) * 2;
		                /**
		                 * si le résultat est >9
		                 */
		                if (digit > RESULTAT_9) {
		                    digit -= RESULTAT_9;
		                }
		            } else {
		                digit = Integer.parseInt(String.valueOf(siret.charAt(i)));
		            }
		            total += digit;
		        }
		        /** Si la somme est un multiple de 10 alors le SIRET est valide */
		        if ((total % MULTIPLE_10) == 0) {
		        	isSiretNicValide = true;
		        }
		}
		
		return isSiretNicValide;
	}

}
